package com.itheima.annotationdemo1;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Demo3 {

    public static void main(String[] args) throws Exception {

        //注解的应用场景，模拟Junit框架演示，有MyTest注解的方法就执行，没有就不执行

        Demo3 d = new Demo3();

        //1.获取类对象
        Class c = Demo3.class;
        //2.获取所有方法
        Method[] methods = c.getMethods();
        //3.遍历所有方法，判断方法上是否有MyTest注解，有就执行，没有就不执行
        for (Method m : methods) {
            //4.判断方法上是否有MyTest注解
            boolean b = m.isAnnotationPresent(MyTest.class);
            if (b) {
                //6.获取注解对象
                MyTest myTest = m.getDeclaredAnnotation(MyTest.class);
                int count = myTest.count();
                //5.执行这个方法
                for (int i = 0; i < count; i++) {
                    m.invoke(d);
                }

            }
        }

    }

    //测试方法：public 无参 无返回值
    @MyTest
    public void test1() {
        System.out.println("test1方法执行了");
    }

    public void test2() {
        System.out.println("test2方法执行了");
    }

    @MyTest(count = 3)
    public void test3() {
        System.out.println("test3方法执行了");
    }

    public void test4() {
        System.out.println("test4方法执行了");
    }
}
